Qt4.7.0文档翻译:QSqlRelationalTableModel类参考, QSqlRelationalTableModel Class Reference
QSqlRelationalTableModel类为一个单个的数据库表提供一个带外键支持的可编辑的数据模型。
QSqlRelationalTableModel表现得像 QSqlTableModel 一样 ,但是允许一些列 被设置为其它数据库表中的外键。
|
|
左边的截屏展示的是一个 QTableView 中的一个普通 QSqlTableModel 。外 键( city 和 country )没有被解释为人类可读的值。右边的截屏展示的是一个QSqlRelationalTableModel ,外 键已经被解释为人类可读的文本字符串。
下面的代码片段展示了QSqlRelationalTableModel 是如何设置的:
model->setTable("employee");
model->setRelation(2, QSqlRelation("city", "id", "name"));
model->setRelation(3, QSqlRelation("country", "id", "name"));
这些 setRelation ()函数的调用建立了两个表之间的关系 。第一个调用指定表 employee 中的第2 列是映射为表 city 的 id 域的外键,而且视图应当向用户显示 city 的 name 域。第二个调用对第3 列进行类似的动作 。
如果你使用一个可读写的QSqlRelationalTableModel ,你可能想要在视图上使用 QSqlRelationalDelegate 。与默认代表不同的是 , QSqlRelationalDelegate 为那些是其它表的外 键的域提供一个组合框。要使用这个类 ,简单地带着一个 QSqlRelationalDelegate 类的实例在视图上调用 QAbstractItemView::setItemDelegate () :
QTableView *view = new QTableView;
view->setModel(model);
view->setItemDelegate(new QSqlRelationalDelegate(view));
sql/关系表模型 示例展示了如何使用QSqlRelationalTableModel 和 QSqlRelationalDelegate 来为表提供外 键支持。
注意:
•.表必须有一个主键。
•.表的主键不能包含到另一个表的关系 。
•.如果一个关系表包含引用了在被引用的表中不存在的行的键,那些包含不可用的 键的行将不会通过模型暴露出来。用户或者数据库有责任保 持引用完整性。
•. 如果一个关系的显示列名也在主表中用作一个列名 ,或者它在多于一个关系中 被用于显示列名,那么它会被进行别名处理。别名是关系的表名与显示列名用一个下划线连接在一起 (例如tablename_columnname)。当重复 被探测到时,所有发生重复的显示列名都被进行别名处理,但是主表中的列名不会进行别名处理 。别名处理不影响 QSqlRelation ,所以 QSqlRelation::displayColumn ()会返回原始的显示列名,但是 QSqlRecord::fieldName ()会返回别名。
•. 当使用 setData ()时 ,角色必须是 Qt::EditRole 。当使用 data ()时,角色必须是 Qt::DisplayRole 。
参见 QSqlRelation , QSqlRelationalDelegate 和 关系表模型示例 。
Your opinionsHxLauncher: Launch Android applications by voice commands